#include<iostream>
#include<cstdlib>
using namespace std;
const int cnt=10;
int pown(int a,int i,int n)
{
    if(i==0) return 1;
    int x=pown(a,i/2,n);
    int temp=x*x%n;
    if(temp==1&&x!=1&&x!=n-1)
    return 0;
    if(i%2) temp=temp*a%n;
    return temp;
}

int quickPower(int a, int b,int m)//是求a的b次方
{
	int ans = 1, base = a;//ans为答案，base为a^(2^n)
	while(b > 0)//b是一个变化的二进制数，如果还没有用完
    {
		if(b & 1)//&是位运算，b&1表示b在二进制下最后一位是不是1，如果是：
		{
            ans *=base;
            ans%=m;
        }//把ans乘上对应的a^(2^n)
		
        base *= base;
        base%=m;//base自乘，由a^(2^n)变成a^(2^(n+1))
		b >>= 1;//位运算，b右移一位，如101变成10（把最右边的1移掉了），10010变成1001。现在b在二进制下最后一位是刚刚的倒数第二位。结合上面b & 1食用更佳
	}
	return ans;
}

bool isprime(int x)
{
    if(x==1) return false;
    if(x==2||x==3) return true;
    srand(0);
    for(int i=0;i<cnt;i++)
    {
        // srand(i+1);大错特错
        int y=rand()%(x-3)+2;//(2~x-1)
        // cout<<y<<" ";
        int flag=pown(y,x-1,x);
        if(flag!=1)
        return false;
    }
    return true;
}

int main()
{
    int carmichael=561;
    for(int i=2;i<10;i++)
    cout<<quickPower(i,carmichael-1,carmichael)<<" ";
    // int n;cin>>n;
    // for(int i=2;i<=n;i++)
    // if(isprime(i)) cout<<i<<" ";
    // if(isprime(n)) 
    // cout<<"yes"<<endl;
    // else cout<<"no"<<endl;
}